package com.baaio.parse;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 该类用于解析和处理日期和时间。
 *
 */
public class BaaioDateParse 
{

	/**
	 * 解析传入的以该"yyyy-MM-dd HH:mm:ss"格式日期。并且返回int数组<br> 
	 * int[0]年<br> 
	 * int[1]月<br> 
	 * int[2]日<br> 
	 * int[3]时<br> 
	 * int[4]分<br> 
	 * int[5]秒<br> 
	 * @param t
	 * @return int[]
	 */
	public int[] parseStringTime(String t)
	{

		ArrayList<String> list = new ArrayList<String>();
		Matcher m = Pattern.compile("\\d*?\\p{Punct}|\\d*?\\p{Space}|\\d\\d")
				.matcher(t);
		while (m.find())
		{
			list.add(m.group());
		}
		int[] value = new int[6];
		for (int i = 0; i < list.size() - 1; i++)
		{
			value[i] = Integer.parseInt(list.get(i).replaceAll("-", "")
					.replaceAll(":", "").trim());
		}
		return value;
	}

	/**
	 * 解析传入的以该"yyyy-MM-dd HH:mm:ss"格式日期的日期字符串。并且返回自历元至传入的日期所经过的 UTC 秒数。<br> 
	 * 历元（即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000，格里高利历）<br> 
	 * @param t
	 * @return
	 */
	public long getStringTimeSecond(String t)
	{

		int[] a = parseStringTime(t);
		Calendar c = Calendar.getInstance();
		c.clear();
		c.set(a[0], a[1], a[2], a[3], a[4], a[5]);
		return c.getTimeInMillis()/1000;
	}
	
	/**
	 * 接收一个长整型的数。并返回Date<br> 
	 * @param second
	 * @return
	 */
	public Date getDate(Long second)
	{
		Calendar c = Calendar.getInstance();
		c.clear();
		c.setTimeInMillis(second);
		return c.getTime();
	}
	
	/**
	 * 接收一个new Date() <br> 
	 * 并返回以"yyyy-MM-dd HH:mm:ss"为格式的当前日期。<br> 
	 * @param date
	 * @return
	 */
	public String getDate(Date date)
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		return sdf.format(date);
	}
	
	/**
	 * 接收一个new Date()和指定的日期格式。并返回该格式的当前日期。<br> 
	 * @param date
	 * @param format
	 * @return
	 */
	public String getDate(Date date,String format)
	{
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		
		return sdf.format(date);
	}

}
